<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 寄生组合继承：
    //     CALL继承 + 类似于原型继承
    // 特点：父类私有和公有的分别是子类实例的私有和公有属性方法（推荐）
    function A(x) {
      this.x = x
    }
    A.prototype.getX = function () {
      console.log(this.x);
    }

    function B(y) {
      A.call(this, 200)
      this.y = y
    }
    // Object.create(OBJ)：创建一个空对象，让空对象的__proto__指向OBJ
    B.prototype = Object.create(A.prototype)
    B.prototype.constructor = B
    B.prototype.getY = function () {
      console.log(this.y);
    }

    let b1 = new B(100)

    // 补充
    // create()是在新语法中增加的方法，在IE8以下不兼容
    // 我们自己写一个类似于该方法的方法
    Object.create = function (obj) {
      function Fn() { }
      Fn.prototype = obj
      return new Fn()
    }
  </script>
</body>

</html>